
/**
 * 日志排序
 * 
 * 题目描述

运维工程师采集到某产品线网运行一天产生的日志n条，现需根据日志时间先后顺序对日志进行排序，日志时间格式为H:M:S.N。

H表示小时(0~23)
M表示分钟(0~59)
S表示秒(0~59)
N表示毫秒(0~999)
时间可能并没有补全，也就是说，01:01:01.001也可能表示为1:1:1.1。

输入描述
第一行输入一个整数n表示日志条数，1<=n<=100000，接下来n行输入n个时间。

输出描述
按时间升序排序之后的时间，如果有两个时间表示的时间相同，则保持输入顺序。

用例
输入	
2
01:41:8.9
1:1:09.211
输出	
1:1:09.211
01:41:8.9
说明	无
输入	
3
23:41:08.023
1:1:09.211
08:01:22.0
输出	
1:1:09.211
08:01:22.0
23:41:08.023
说明	无
输入	
2
22:41:08.023
22:41:08.23
输出	
22:41:08.023
22:41:08.23
说明	两个时间表示的时间相同，保持输入顺序

 */

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

/**
 * 题目解析
排序日志时间用到的知识是：

将字符串时间中各要素提取出来（正则捕获组），然后计算出总毫秒数
根据Array.prototype.sort自定义排序策略，来算出的总毫秒数进行排序

023.08.15 优化

将字符串时间中各要素提取出来，其实可以简单地按照 ":" 和 "." 进行分割，这里可以使用正则 [:.] ，作为分隔符。

2023.10.15 

本题考试Java如果出现超时，则大概率是输入获取超时，可以考虑使用BufferedReader高效输入获取方式。
 * 
 */
public class 日志排序 {

    public static void main(String[] args) {

        //可以 先尝试 scanner  超时 再用 BufferedReader

        try{

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
            int n = Integer.parseInt(br.readLine());
     
            Log[] logs = new Log[n];
            for (int i = 0; i < n; i++) {
                logs[i] = new Log(br.readLine());
            }
     
            Arrays.sort(logs, (a, b) -> Long.compare(a.timestamp, b.timestamp));
     
            for (Log log : logs) {
                System.out.println(log.time);
            }

        }catch(Exception e){
            e.printStackTrace();
        }
    }
 
    public static long convert(String log) {
        String[] tmp = log.split("[:.]");
        long H = Long.parseLong(tmp[0]) * 60 * 60 * 1000;
        long M = Long.parseLong(tmp[1]) * 60 * 1000;
        long S = Long.parseLong(tmp[2]) * 1000;
        long N = Long.parseLong(tmp[3]);
        return H + M + S + N;
    }

    private static class Log {
        String time;
        long timestamp;
 
        public Log(String time) {
            this.time = time;
            this.timestamp = convert(time);
        }
    }
}